//----------------------------------------------------------------------素性测试

//米勒-拉宾素性测试
//           依赖:数论基础-> mod_exp() & mod_mult()
int miller_rabin(LL n,int time)
{
	if (n==2||n==3||n==5||n==7)return 1;
	if (n<2||!(n&1))return 0;
	int i,j,t=0;
	LL a,x,y,u=n-1;
	while((u&1)==0) t++,u>>=1;
	for(i=0;i<time;i++)
	{
		a=rand()%(n-1)+1;
		x=mod_exp(a,u,n);
		for(j=0;j<t;j++)
		{
			y=mod_mult(x,x,n);
			if (y==1&&x!=1&&x!=n-1)
				return 0;
			x=y;
		}
		if (x!=1)
			return 0;
	}
	return 1;
}
